Rule = function (a, b, st) {
	this.Subject = a;
	this.Adjective = b;
	this.StartPoint = st;
};
Rule.prototype.contains = function (index) {
	return index >= this.StartPoint && this.StartPoint + 2 >= index;
};
Rule.prototype.apply = function() {
	switch (this.Adjective) {
		case AL.Forbid:{
			BlockConfigs[LetterBlocks[this.Subject]].forbid = 0;
			this.Unapply = function () {
				delete BlockConfigs[LetterBlocks[this.Subject]].forbid;
			};
			break;
		}
		case AL.Pushable:{
			BlockConfigs[LetterBlocks[this.Subject]].pushable = 0;
			this.Unapply = function () {
				delete BlockConfigs[LetterBlocks[this.Subject]].pushable;
			};
			break;
		}
		case AL.Win:{
			BlockConfigs[LetterBlocks[this.Subject]].win = 0;
			this.Unapply = function () {
				delete BlockConfigs[LetterBlocks[this.Subject]].win;
			};
			break;
		}
	}
	return this;
};
Rule.prototype.unapply = function() {
	if (!this.Unapply) return;
	this.Unapply();
	return this;
};